﻿using System.Collections;

using UnityEngine;

public class Player : MonoBehaviour {
	// Spaceship(飞船脚本组件)
	Spaceship spaceship;

	IEnumerator Start ( ) {
		// 获取飞船脚本组件
		spaceship = GetComponent<Spaceship> ( );

		while (true) {

			// 子弹以玩家的位置与角度生成
			spaceship.Shot (transform);

			// 播放子弹声音
			GetComponent<AudioSource> ( ).Play ( );

			// 等待shotDelay秒
			yield return new WaitForSeconds (spaceship.shotDelay);
		}
	}

	void Update ( ) {
		// 右・左
		float x = Input.GetAxisRaw ("Horizontal");

		// 上・下
		float y = Input.GetAxisRaw ("Vertical");

		// 计算出移动的方向
		Vector2 direction = new Vector2 (x, y).normalized;

		// 移动，同时对移动的位置做限制(防止超出屏幕)
		Move (direction);

	}

	// 移动
	void Move (Vector2 direction) {

		// 从摄像头的左下获取左下的世界坐标
		Vector2 min = Camera.main.ViewportToWorldPoint (new Vector2 (0, 0));

		// 从摄像头的右上获取左下的世界坐标
		Vector2 max = Camera.main.ViewportToWorldPoint (new Vector2 (1, 1));

		// 获取玩家的坐标
		Vector2 pos = transform.position;

		// 增加移动量
		pos += direction * spaceship.speed * Time.deltaTime;

		// 玩家的位置限制在摄像头的画面内
		pos.x = Mathf.Clamp (pos.x, min.x, max.x);
		pos.y = Mathf.Clamp (pos.y, min.y, max.y);

		// Sample
		// Math.clamp (-5, 2, 15); // returns 2
		// Math.clamp (4.6, 2, 15); // returns 4.6
		// Math.clamp (103, 2, 15); // returns 15

		// 更新玩家的位置（限制过的）
		transform.position = pos;
	}

	// 碰撞到物体的时候触发
	void OnTriggerEnter2D (Collider2D c) {
		// 获取对象的图层名
		string layerName = LayerMask.LayerToName (c.gameObject.layer);

		// 敌人的子弹
		if (layerName == "Bullet (Enemy)") {
			// 销毁子弹
			Destroy (c.gameObject);
		}

		// 对象图层名是Bullet (Enemy)或者Enemy的时候
		if (layerName == "Bullet (Enemy)" || layerName == "Enemy") {
			// 从场景中寻找Manager组件，执行GameOver方法
			FindObjectOfType<Manager> ( ).GameOver ( );

			// 爆炸特效
			spaceship.Explosion ( );

			// 销毁自己(玩家)
			Destroy (gameObject);
		}
	}
}
